jekyll-webawesome 0.6.1 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +37 -0
- data/README.md +0 -15
- data/jekyll-webawesome.gemspec +1 -1
- data/lib/jekyll/webawesome/code_block_transformer.rb +46 -43
- data/lib/jekyll/webawesome/plugin.rb +49 -13
- data/lib/jekyll/webawesome/version.rb +1 -1
- data/lib/jekyll/webawesome.rb +13 -1
- metadata +4 -20
- data/lib/jekyll/webawesome/transformer.rb +0 -31
- data/lib/jekyll/webawesome/transformers/badge_transformer.rb +0 -48
- data/lib/jekyll/webawesome/transformers/base_transformer.rb +0 -65
- data/lib/jekyll/webawesome/transformers/button_transformer.rb +0 -68
- data/lib/jekyll/webawesome/transformers/callout_transformer.rb +0 -72
- data/lib/jekyll/webawesome/transformers/card_transformer.rb +0 -121
- data/lib/jekyll/webawesome/transformers/carousel_transformer.rb +0 -129
- data/lib/jekyll/webawesome/transformers/comparison_transformer.rb +0 -74
- data/lib/jekyll/webawesome/transformers/copy_button_transformer.rb +0 -49
- data/lib/jekyll/webawesome/transformers/details_transformer.rb +0 -85
- data/lib/jekyll/webawesome/transformers/dialog_transformer.rb +0 -175
- data/lib/jekyll/webawesome/transformers/icon_transformer.rb +0 -82
- data/lib/jekyll/webawesome/transformers/image_dialog_transformer.rb +0 -174
- data/lib/jekyll/webawesome/transformers/tabs_transformer.rb +0 -53
- data/lib/jekyll/webawesome/transformers/tag_transformer.rb +0 -58
- data/lib/jekyll/webawesome/transformers.rb +0 -19
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7b6eb4f391cab1dfe15ec2aa266b96d8ae24deb895e7adf31ea9803c82deffaa
|
|
4
|
+
data.tar.gz: cb090de2e14286bca9be4ccbd353f87243ecfb73d13ff48b2a04407ba788a111
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: '09e56263d9312ce554e7d7c8af43b414c6dfe0b87d300c2f90381dead47350eb4b2e4eabcdfc4f467fbfa63cdca3ee4b06628a2d6fe4695b359c11e4e8e49082'
|
|
7
|
+
data.tar.gz: 58f86a89531e199421d85f6af6b93c8594997c357f0256716a89ed259be39a2a8a6f30a428f5f2a3b91ba50af9dd74f19789d10a0ab1ee469f6ceff23ef13ce6
|
data/CHANGELOG.md
CHANGED
|
@@ -8,6 +8,43 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/)
|
|
|
8
8
|
|
|
9
9
|
- Placeholder
|
|
10
10
|
|
|
11
|
+
## [0.7.0] - 2025-10-27
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
|
|
15
|
+
- **BREAKING CHANGE**: Extracted all transformation logic into separate `markawesome` gem
|
|
16
|
+
- Jekyll WebAwesome now depends on `markawesome ~> 0.1` for transformation logic
|
|
17
|
+
- Configuration is now synced from Jekyll to Markawesome automatically
|
|
18
|
+
- Hook registration wrapped in conditional checks to prevent test environment errors
|
|
19
|
+
|
|
20
|
+
### Removed
|
|
21
|
+
|
|
22
|
+
- All transformer classes moved to `markawesome` gem
|
|
23
|
+
- Individual transformer spec files (now in `markawesome` gem)
|
|
24
|
+
|
|
25
|
+
### Added
|
|
26
|
+
|
|
27
|
+
- Configuration sync method to pass Jekyll config to Markawesome
|
|
28
|
+
- Conditional `if defined?(Jekyll::Hooks)` guards around hook registrations
|
|
29
|
+
- Support for passing `image_dialog` options to Markawesome transformer
|
|
30
|
+
|
|
31
|
+
### Technical Details
|
|
32
|
+
|
|
33
|
+
This release extracts the Markdown-to-Web Awesome transformation engine into a framework-agnostic gem called `markawesome`. The `jekyll-webawesome` gem now focuses solely on Jekyll integration (hooks, plugin registration, code block handling), while `markawesome` handles all component transformations.
|
|
34
|
+
|
|
35
|
+
Benefits:
|
|
36
|
+
|
|
37
|
+
- Transformation logic can now be used with other static site generators (Hugo, Middleman, etc.)
|
|
38
|
+
- Better separation of concerns
|
|
39
|
+
- Easier testing and maintenance
|
|
40
|
+
- No breaking changes for end users (syntax remains the same)
|
|
41
|
+
|
|
42
|
+
Migration:
|
|
43
|
+
|
|
44
|
+
- Update your Gemfile: `gem 'jekyll-webawesome', '~> 0.5.0'`
|
|
45
|
+
- Run `bundle update jekyll-webawesome`
|
|
46
|
+
- No configuration changes needed - everything works the same
|
|
47
|
+
|
|
11
48
|
## [0.6.0] - 2025-10-23
|
|
12
49
|
|
|
13
50
|
- Support inline wa-tag components
|
data/README.md
CHANGED
|
@@ -24,21 +24,6 @@ This plugin focuses on the most commonly used Web Awesome components for Jekyll
|
|
|
24
24
|
| **Tab Group** | `++++++` | `:::wa-tabs` | `<wa-tab-group><wa-tab>content</wa-tab></wa-tab-group>` |
|
|
25
25
|
| **Tag** | `@@@brand` | `:::wa-tag brand` | `<wa-tag variant="brand">content</wa-tag>` |
|
|
26
26
|
|
|
27
|
-
### Planned
|
|
28
|
-
|
|
29
|
-
These content-focused components will get dedicated syntax in future releases:
|
|
30
|
-
|
|
31
|
-
| Component | Primary Syntax | Alternative syntax | HTML Output |
|
|
32
|
-
|-----------|----------------------|-------------------|-------------|
|
|
33
|
-
| **Icon** | `$$$icon-name` | `:::wa-icon name` | `<wa-icon name="icon-name"></wa-icon>` |
|
|
34
|
-
| **Progress Bar** | `&&&value` | `:::wa-progress-bar value` | `<wa-progress-bar value="50"></wa-progress-bar>` |
|
|
35
|
-
| **Rating** | `???value` | `:::wa-rating value` | `<wa-rating value="4"></wa-rating>` |
|
|
36
|
-
| **Avatar** | (none) | `:::wa-avatar` | `<wa-avatar>` |
|
|
37
|
-
| **QR Code** | (none) | `:::wa-qr-code` | `<wa-qr-code>` |
|
|
38
|
-
| **Skeleton** | (none) | `:::wa-skeleton` | `<wa-skeleton>` |
|
|
39
|
-
| **Spinner** | (none) | `:::wa-spinner` | `<wa-spinner>` |
|
|
40
|
-
| **Tooltip** | (none) | `:::wa-tooltip` | `<wa-tooltip>` |
|
|
41
|
-
|
|
42
27
|
Not all components will make sense to include here, to be included in the "prose" content of a web page. Some components are more suitable to be used in layouts or used in the page as includes, too complicated for this purpose.
|
|
43
28
|
|
|
44
29
|
Both syntax styles work identically and can be mixed within the same document.
|
data/jekyll-webawesome.gemspec
CHANGED
|
@@ -33,7 +33,7 @@ Gem::Specification.new do |spec|
|
|
|
33
33
|
spec.require_paths = ['lib']
|
|
34
34
|
|
|
35
35
|
spec.add_dependency 'jekyll', '>= 3.7', '< 5.0'
|
|
36
|
-
spec.add_dependency '
|
|
36
|
+
spec.add_dependency 'markawesome', '~> 0.1'
|
|
37
37
|
|
|
38
38
|
spec.add_development_dependency 'bundler', '~> 2.0'
|
|
39
39
|
spec.add_development_dependency 'rake', '~> 13.0'
|
|
@@ -96,61 +96,64 @@ module Jekyll
|
|
|
96
96
|
end
|
|
97
97
|
|
|
98
98
|
# Register hooks directly in the transformer module
|
|
99
|
-
#
|
|
100
|
-
Jekyll::Hooks
|
|
101
|
-
|
|
102
|
-
|
|
99
|
+
# Wrapped in conditional to prevent errors when Jekyll::Hooks is not fully loaded
|
|
100
|
+
if defined?(Jekyll::Hooks)
|
|
101
|
+
# Clear protected blocks at start of build
|
|
102
|
+
Jekyll::Hooks.register :site, :pre_render do |_site|
|
|
103
|
+
CodeBlockTransformer.clear_protected_blocks
|
|
104
|
+
end
|
|
103
105
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
106
|
+
# STEP 1: Protect all code blocks BEFORE any transformations (highest priority)
|
|
107
|
+
Jekyll::Hooks.register :documents, :pre_render, priority: 50 do |document|
|
|
108
|
+
next unless document.relative_path =~ /.*\.md$/i
|
|
109
|
+
next unless CodeBlockTransformer.transform_documents_enabled?(document.site)
|
|
108
110
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
111
|
+
puts "Jekyll::WebAwesome::CodeBlockTransformer protecting code blocks in document: #{document.relative_path}\n"
|
|
112
|
+
document.content = CodeBlockTransformer.protect_all_code_blocks(document.content)
|
|
113
|
+
end
|
|
112
114
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
115
|
+
Jekyll::Hooks.register :pages, :pre_render, priority: 50 do |page|
|
|
116
|
+
next unless page.relative_path =~ /.*\.md$/i
|
|
117
|
+
next unless CodeBlockTransformer.transform_pages_enabled?(page.site)
|
|
116
118
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
119
|
+
puts "Jekyll::WebAwesome::CodeBlockTransformer protecting code blocks in page: #{page.relative_path}\n"
|
|
120
|
+
page.content = CodeBlockTransformer.protect_all_code_blocks(page.content)
|
|
121
|
+
end
|
|
120
122
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
123
|
+
# STEP 2: Transform protected code blocks to Jekyll highlight syntax
|
|
124
|
+
# This happens AFTER WebAwesome transformers (priority 20) but BEFORE restoration
|
|
125
|
+
Jekyll::Hooks.register :documents, :pre_render, priority: 15 do |document|
|
|
126
|
+
next unless document.relative_path =~ /.*\.md$/i
|
|
127
|
+
next unless CodeBlockTransformer.transform_documents_enabled?(document.site)
|
|
126
128
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
129
|
+
puts "Jekyll::WebAwesome::CodeBlockTransformer transforming code blocks in document: #{document.relative_path}\n"
|
|
130
|
+
document.content = CodeBlockTransformer.transform_code_blocks(document.content)
|
|
131
|
+
end
|
|
130
132
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
133
|
+
Jekyll::Hooks.register :pages, :pre_render, priority: 15 do |page|
|
|
134
|
+
next unless page.relative_path =~ /.*\.md$/i
|
|
135
|
+
next unless CodeBlockTransformer.transform_pages_enabled?(page.site)
|
|
134
136
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
137
|
+
puts "Jekyll::WebAwesome::CodeBlockTransformer transforming code blocks in page: #{page.relative_path}\n"
|
|
138
|
+
page.content = CodeBlockTransformer.transform_code_blocks(page.content)
|
|
139
|
+
end
|
|
138
140
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
141
|
+
# STEP 3: Restore protected blocks after transformation (lowest priority)
|
|
142
|
+
Jekyll::Hooks.register :documents, :pre_render, priority: 10 do |document|
|
|
143
|
+
next unless document.relative_path =~ /.*\.md$/i
|
|
144
|
+
next unless CodeBlockTransformer.transform_documents_enabled?(document.site)
|
|
143
145
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
146
|
+
puts "Jekyll::WebAwesome::CodeBlockTransformer restoring code blocks in document: #{document.relative_path}\n"
|
|
147
|
+
document.content = CodeBlockTransformer.restore_protected_blocks(document.content)
|
|
148
|
+
end
|
|
147
149
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
150
|
+
Jekyll::Hooks.register :pages, :pre_render, priority: 10 do |page|
|
|
151
|
+
next unless page.relative_path =~ /.*\.md$/i
|
|
152
|
+
next unless CodeBlockTransformer.transform_pages_enabled?(page.site)
|
|
151
153
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
+
puts "Jekyll::WebAwesome::CodeBlockTransformer restoring code blocks in page: #{page.relative_path}\n"
|
|
155
|
+
page.content = CodeBlockTransformer.restore_protected_blocks(page.content)
|
|
156
|
+
end
|
|
154
157
|
end
|
|
155
158
|
end
|
|
156
159
|
end
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative 'transformer'
|
|
4
3
|
require_relative 'code_block_transformer'
|
|
5
4
|
|
|
6
5
|
module Jekyll
|
|
@@ -84,21 +83,58 @@ module Jekyll
|
|
|
84
83
|
filepath.to_s.match?(/\.md$/i)
|
|
85
84
|
end
|
|
86
85
|
|
|
87
|
-
#
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
86
|
+
# Sync Jekyll configuration to Markawesome before processing
|
|
87
|
+
def self.sync_configuration(site)
|
|
88
|
+
# Sync callout icons from site config if present
|
|
89
|
+
if site.config.dig('webawesome', 'callout_icons')
|
|
90
|
+
Markawesome.configure do |config|
|
|
91
|
+
config.callout_icons = site.config.dig('webawesome', 'callout_icons').transform_keys(&:to_sym)
|
|
92
|
+
end
|
|
93
|
+
elsif Jekyll::WebAwesome.configuration&.callout_icons
|
|
94
|
+
Markawesome.configure do |config|
|
|
95
|
+
config.callout_icons = Jekyll::WebAwesome.configuration.callout_icons
|
|
96
|
+
end
|
|
97
|
+
end
|
|
94
98
|
end
|
|
95
99
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
100
|
+
# Register hooks for pre-render processing (before markdown conversion)
|
|
101
|
+
# Wrapped in conditional to prevent errors when Jekyll::Hooks is not fully loaded
|
|
102
|
+
if defined?(Jekyll::Hooks)
|
|
103
|
+
Jekyll::Hooks.register :documents, :pre_render do |document|
|
|
104
|
+
next unless markdown_file?(document.relative_path)
|
|
105
|
+
next unless transform_documents_enabled?(document.site)
|
|
106
|
+
|
|
107
|
+
# Sync configuration from Jekyll to Markawesome
|
|
108
|
+
sync_configuration(document.site)
|
|
109
|
+
|
|
110
|
+
puts "Jekyll::WebAwesome Processing document (pre-render): #{document.relative_path}\n" if debug_enabled?(document.site)
|
|
111
|
+
|
|
112
|
+
# Build options for Markawesome
|
|
113
|
+
options = {}
|
|
114
|
+
if image_dialog_enabled?(document.site)
|
|
115
|
+
options[:image_dialog] = image_dialog_config(document.site)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
document.content = Markawesome::Transformer.process(document.content, options)
|
|
119
|
+
end
|
|
99
120
|
|
|
100
|
-
|
|
101
|
-
|
|
121
|
+
Jekyll::Hooks.register :pages, :pre_render do |page|
|
|
122
|
+
next unless markdown_file?(page.relative_path)
|
|
123
|
+
next unless transform_pages_enabled?(page.site)
|
|
124
|
+
|
|
125
|
+
# Sync configuration from Jekyll to Markawesome
|
|
126
|
+
sync_configuration(page.site)
|
|
127
|
+
|
|
128
|
+
puts "Jekyll::WebAwesome Processing page (pre-render): #{page.relative_path}\n" if debug_enabled?(page.site)
|
|
129
|
+
|
|
130
|
+
# Build options for Markawesome
|
|
131
|
+
options = {}
|
|
132
|
+
if image_dialog_enabled?(page.site)
|
|
133
|
+
options[:image_dialog] = image_dialog_config(page.site)
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
page.content = Markawesome::Transformer.process(page.content, options)
|
|
137
|
+
end
|
|
102
138
|
end
|
|
103
139
|
end
|
|
104
140
|
end
|
data/lib/jekyll/webawesome.rb
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require 'markawesome'
|
|
3
4
|
require_relative 'webawesome/version'
|
|
4
|
-
require_relative 'webawesome/transformer'
|
|
5
5
|
require_relative 'webawesome/code_block_transformer'
|
|
6
6
|
require_relative 'webawesome/plugin'
|
|
7
7
|
|
|
@@ -17,8 +17,20 @@ module Jekyll
|
|
|
17
17
|
def configure
|
|
18
18
|
self.configuration ||= Configuration.new
|
|
19
19
|
yield(configuration) if block_given?
|
|
20
|
+
# Sync configuration to Markawesome
|
|
21
|
+
sync_to_markawesome
|
|
20
22
|
configuration
|
|
21
23
|
end
|
|
24
|
+
|
|
25
|
+
# Sync Jekyll WebAwesome configuration to Markawesome
|
|
26
|
+
def sync_to_markawesome
|
|
27
|
+
return unless configuration
|
|
28
|
+
|
|
29
|
+
Markawesome.configure do |config|
|
|
30
|
+
config.callout_icons = configuration.callout_icons if configuration.callout_icons
|
|
31
|
+
config.custom_components = configuration.custom_components if configuration.custom_components
|
|
32
|
+
end
|
|
33
|
+
end
|
|
22
34
|
end
|
|
23
35
|
|
|
24
36
|
# Configuration class for future extensibility
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: jekyll-webawesome
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.7.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Janne Waren
|
|
@@ -30,19 +30,19 @@ dependencies:
|
|
|
30
30
|
- !ruby/object:Gem::Version
|
|
31
31
|
version: '5.0'
|
|
32
32
|
- !ruby/object:Gem::Dependency
|
|
33
|
-
name:
|
|
33
|
+
name: markawesome
|
|
34
34
|
requirement: !ruby/object:Gem::Requirement
|
|
35
35
|
requirements:
|
|
36
36
|
- - "~>"
|
|
37
37
|
- !ruby/object:Gem::Version
|
|
38
|
-
version: '
|
|
38
|
+
version: '0.1'
|
|
39
39
|
type: :runtime
|
|
40
40
|
prerelease: false
|
|
41
41
|
version_requirements: !ruby/object:Gem::Requirement
|
|
42
42
|
requirements:
|
|
43
43
|
- - "~>"
|
|
44
44
|
- !ruby/object:Gem::Version
|
|
45
|
-
version: '
|
|
45
|
+
version: '0.1'
|
|
46
46
|
- !ruby/object:Gem::Dependency
|
|
47
47
|
name: bundler
|
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -115,22 +115,6 @@ files:
|
|
|
115
115
|
- lib/jekyll/webawesome.rb
|
|
116
116
|
- lib/jekyll/webawesome/code_block_transformer.rb
|
|
117
117
|
- lib/jekyll/webawesome/plugin.rb
|
|
118
|
-
- lib/jekyll/webawesome/transformer.rb
|
|
119
|
-
- lib/jekyll/webawesome/transformers.rb
|
|
120
|
-
- lib/jekyll/webawesome/transformers/badge_transformer.rb
|
|
121
|
-
- lib/jekyll/webawesome/transformers/base_transformer.rb
|
|
122
|
-
- lib/jekyll/webawesome/transformers/button_transformer.rb
|
|
123
|
-
- lib/jekyll/webawesome/transformers/callout_transformer.rb
|
|
124
|
-
- lib/jekyll/webawesome/transformers/card_transformer.rb
|
|
125
|
-
- lib/jekyll/webawesome/transformers/carousel_transformer.rb
|
|
126
|
-
- lib/jekyll/webawesome/transformers/comparison_transformer.rb
|
|
127
|
-
- lib/jekyll/webawesome/transformers/copy_button_transformer.rb
|
|
128
|
-
- lib/jekyll/webawesome/transformers/details_transformer.rb
|
|
129
|
-
- lib/jekyll/webawesome/transformers/dialog_transformer.rb
|
|
130
|
-
- lib/jekyll/webawesome/transformers/icon_transformer.rb
|
|
131
|
-
- lib/jekyll/webawesome/transformers/image_dialog_transformer.rb
|
|
132
|
-
- lib/jekyll/webawesome/transformers/tabs_transformer.rb
|
|
133
|
-
- lib/jekyll/webawesome/transformers/tag_transformer.rb
|
|
134
118
|
- lib/jekyll/webawesome/version.rb
|
|
135
119
|
- lib/jekyll_webawesome.rb
|
|
136
120
|
homepage: https://github.com/jannewaren/jekyll-webawesome
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'jekyll'
|
|
4
|
-
require 'kramdown'
|
|
5
|
-
require_relative 'transformers'
|
|
6
|
-
|
|
7
|
-
module Jekyll
|
|
8
|
-
module WebAwesome
|
|
9
|
-
# Main transformer that orchestrates all component transformers
|
|
10
|
-
class Transformer
|
|
11
|
-
def self.process(content, site = nil)
|
|
12
|
-
content = BadgeTransformer.transform(content)
|
|
13
|
-
content = ButtonTransformer.transform(content)
|
|
14
|
-
content = CalloutTransformer.transform(content)
|
|
15
|
-
content = CardTransformer.transform(content)
|
|
16
|
-
content = CarouselTransformer.transform(content)
|
|
17
|
-
content = ComparisonTransformer.transform(content)
|
|
18
|
-
content = CopyButtonTransformer.transform(content)
|
|
19
|
-
content = DetailsTransformer.transform(content)
|
|
20
|
-
|
|
21
|
-
# Apply image dialog transformer BEFORE dialog transformer so it can generate dialog syntax
|
|
22
|
-
content = ImageDialogTransformer.transform(content, site) if site && Plugin.image_dialog_enabled?(site)
|
|
23
|
-
|
|
24
|
-
content = DialogTransformer.transform(content)
|
|
25
|
-
content = IconTransformer.transform(content)
|
|
26
|
-
content = TagTransformer.transform(content)
|
|
27
|
-
TabsTransformer.transform(content)
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require_relative 'base_transformer'
|
|
4
|
-
|
|
5
|
-
module Jekyll
|
|
6
|
-
module WebAwesome
|
|
7
|
-
# Transforms badge syntax into wa-badge elements
|
|
8
|
-
# Primary syntax: !!!variant?\ncontent\n!!!
|
|
9
|
-
# Alternative syntax: :::wa-badge variant?\ncontent\n:::
|
|
10
|
-
# Variants: brand, success, neutral, warning, danger
|
|
11
|
-
class BadgeTransformer < BaseTransformer
|
|
12
|
-
def self.transform(content)
|
|
13
|
-
# Define both regex patterns
|
|
14
|
-
primary_regex = /^!!!(brand|success|neutral|warning|danger)?\n(.*?)\n!!!/m
|
|
15
|
-
alternative_regex = /^:::wa-badge\s*(brand|success|neutral|warning|danger)?\n(.*?)\n:::/m
|
|
16
|
-
|
|
17
|
-
# Define shared transformation logic
|
|
18
|
-
transform_proc = proc do |variant, badge_content|
|
|
19
|
-
badge_content = badge_content.strip
|
|
20
|
-
|
|
21
|
-
build_badge_html(badge_content, variant)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
# Apply both patterns
|
|
25
|
-
patterns = dual_syntax_patterns(primary_regex, alternative_regex, transform_proc)
|
|
26
|
-
apply_multiple_patterns(content, patterns)
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
class << self
|
|
30
|
-
private
|
|
31
|
-
|
|
32
|
-
def build_badge_html(content, variant)
|
|
33
|
-
variant_attr = variant ? " variant=\"#{variant}\"" : ''
|
|
34
|
-
badge_html = markdown_to_html(content).strip
|
|
35
|
-
|
|
36
|
-
# Remove paragraph tags if the content is just text
|
|
37
|
-
badge_html = badge_html.gsub(%r{^<p>(.*)</p>$}m, '\1')
|
|
38
|
-
|
|
39
|
-
# Fix whitespace issues in Web Awesome badges by ensuring proper spacing
|
|
40
|
-
# Replace spaces after closing tags with non-breaking spaces to prevent CSS collapse
|
|
41
|
-
badge_html = badge_html.gsub(%r{(</\w+>)\s+}, '\1 ')
|
|
42
|
-
|
|
43
|
-
"<wa-badge#{variant_attr}>#{badge_html}</wa-badge>"
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
end
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'English'
|
|
4
|
-
require 'jekyll'
|
|
5
|
-
require 'kramdown'
|
|
6
|
-
|
|
7
|
-
module Jekyll
|
|
8
|
-
module WebAwesome
|
|
9
|
-
# Base class for all Web Awesome component transformers
|
|
10
|
-
# Each transformer should implement the transform method
|
|
11
|
-
class BaseTransformer
|
|
12
|
-
def self.transform(content)
|
|
13
|
-
raise NotImplementedError, 'Subclasses must implement the transform method'
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
class << self
|
|
17
|
-
protected
|
|
18
|
-
|
|
19
|
-
# Helper method to convert markdown content to HTML
|
|
20
|
-
def markdown_to_html(content)
|
|
21
|
-
Kramdown::Document.new(content).to_html
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
# Helper method to apply multiple regex patterns with the same transformation logic
|
|
25
|
-
# @param content [String] The content to transform
|
|
26
|
-
# @param patterns [Array<Hash>] Array of pattern hashes with :regex and :block
|
|
27
|
-
# @return [String] The transformed content
|
|
28
|
-
def apply_multiple_patterns(content, patterns)
|
|
29
|
-
patterns.each do |pattern|
|
|
30
|
-
content = content.gsub(pattern[:regex]) do |match|
|
|
31
|
-
pattern[:block].call(match, $LAST_MATCH_INFO)
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
content
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
# Helper method to create both primary and alternative syntax patterns
|
|
38
|
-
# @param primary_regex [Regexp] The primary syntax regex
|
|
39
|
-
# @param alternative_regex [Regexp] The alternative syntax regex
|
|
40
|
-
# @param transform_proc [Proc] The proc that takes captured groups and returns HTML
|
|
41
|
-
# @return [Array<Hash>] Array of pattern hashes
|
|
42
|
-
def dual_syntax_patterns(primary_regex, alternative_regex, transform_proc)
|
|
43
|
-
[
|
|
44
|
-
{
|
|
45
|
-
regex: primary_regex,
|
|
46
|
-
block: proc do |_match, matchdata|
|
|
47
|
-
# Get all captured groups from the matchdata
|
|
48
|
-
captures = matchdata.captures
|
|
49
|
-
transform_proc.call(*captures)
|
|
50
|
-
end
|
|
51
|
-
},
|
|
52
|
-
{
|
|
53
|
-
regex: alternative_regex,
|
|
54
|
-
block: proc do |_match, matchdata|
|
|
55
|
-
# Get all captured groups from the matchdata
|
|
56
|
-
captures = matchdata.captures
|
|
57
|
-
transform_proc.call(*captures)
|
|
58
|
-
end
|
|
59
|
-
}
|
|
60
|
-
]
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
end
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require_relative 'base_transformer'
|
|
4
|
-
|
|
5
|
-
module Jekyll
|
|
6
|
-
module WebAwesome
|
|
7
|
-
# Transforms button syntax into wa-button elements
|
|
8
|
-
# Primary syntax: %%%variant?\ncontent\n%%%
|
|
9
|
-
# Alternative syntax: :::wa-button variant?\ncontent\n:::
|
|
10
|
-
# Variants: brand, success, neutral, warning, danger
|
|
11
|
-
#
|
|
12
|
-
# Link buttons: %%%brand\n[Text](url)\n%%%
|
|
13
|
-
# Regular buttons: %%%brand\nText\n%%%
|
|
14
|
-
class ButtonTransformer < BaseTransformer
|
|
15
|
-
def self.transform(content)
|
|
16
|
-
# Define both regex patterns
|
|
17
|
-
primary_regex = /^%%%(brand|success|neutral|warning|danger)?\n(.*?)\n%%%/m
|
|
18
|
-
alternative_regex = /^:::wa-button\s*(brand|success|neutral|warning|danger)?\n(.*?)\n:::/m
|
|
19
|
-
|
|
20
|
-
# Define shared transformation logic
|
|
21
|
-
transform_proc = proc do |variant, button_content|
|
|
22
|
-
button_content = button_content.strip
|
|
23
|
-
|
|
24
|
-
build_button_html(button_content, variant)
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
# Apply both patterns
|
|
28
|
-
patterns = dual_syntax_patterns(primary_regex, alternative_regex, transform_proc)
|
|
29
|
-
apply_multiple_patterns(content, patterns)
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
class << self
|
|
33
|
-
private
|
|
34
|
-
|
|
35
|
-
def build_button_html(content, variant)
|
|
36
|
-
variant_attr = variant ? " variant=\"#{variant}\"" : ''
|
|
37
|
-
|
|
38
|
-
# Check if content contains a markdown link
|
|
39
|
-
link_match = content.match(/^\[([^\]]+)\]\(([^)]+)\)$/)
|
|
40
|
-
|
|
41
|
-
if link_match
|
|
42
|
-
# It's a link button
|
|
43
|
-
link_text = link_match[1]
|
|
44
|
-
link_url = link_match[2]
|
|
45
|
-
|
|
46
|
-
# Process any markdown in the link text (bold, italic, etc.)
|
|
47
|
-
button_html = markdown_to_html(link_text).strip
|
|
48
|
-
button_html = button_html.gsub(%r{^<p>(.*)</p>$}m, '\1')
|
|
49
|
-
|
|
50
|
-
# Fix whitespace issues like in badges
|
|
51
|
-
button_html = button_html.gsub(%r{(</\w+>)\s+}, '\1 ')
|
|
52
|
-
|
|
53
|
-
"<wa-button#{variant_attr} href=\"#{link_url}\">#{button_html}</wa-button>"
|
|
54
|
-
else
|
|
55
|
-
# It's a regular button
|
|
56
|
-
button_html = markdown_to_html(content).strip
|
|
57
|
-
button_html = button_html.gsub(%r{^<p>(.*)</p>$}m, '\1')
|
|
58
|
-
|
|
59
|
-
# Fix whitespace issues like in badges
|
|
60
|
-
button_html = button_html.gsub(%r{(</\w+>)\s+}, '\1 ')
|
|
61
|
-
|
|
62
|
-
"<wa-button#{variant_attr}>#{button_html}</wa-button>"
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
end
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require_relative 'base_transformer'
|
|
4
|
-
|
|
5
|
-
module Jekyll
|
|
6
|
-
module WebAwesome
|
|
7
|
-
# Transforms callout syntax into wa-callout elements
|
|
8
|
-
# Primary syntax: :::variant\ncontent\n:::
|
|
9
|
-
# Alternative syntax: :::wa-callout variant\ncontent\n:::
|
|
10
|
-
# Variants: info, success, neutral, warning, danger
|
|
11
|
-
class CalloutTransformer < BaseTransformer
|
|
12
|
-
def self.transform(content)
|
|
13
|
-
# Define both regex patterns
|
|
14
|
-
primary_regex = /^:::(info|success|neutral|warning|danger)\n(.*?)\n:::/m
|
|
15
|
-
alternative_regex = /^:::wa-callout\s+(info|success|neutral|warning|danger)\n(.*?)\n:::/m
|
|
16
|
-
|
|
17
|
-
# Define shared transformation logic
|
|
18
|
-
transform_proc = proc do |variant, inner_content|
|
|
19
|
-
attrs = callout_attributes(variant)
|
|
20
|
-
|
|
21
|
-
element_tag = "wa-callout#{attrs[:additional_params]}"
|
|
22
|
-
html_content = "#{attrs[:inner_prepend]}#{markdown_to_html(inner_content)}"
|
|
23
|
-
|
|
24
|
-
"<#{element_tag}>#{html_content}</wa-callout>"
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
# Apply both patterns
|
|
28
|
-
patterns = dual_syntax_patterns(primary_regex, alternative_regex, transform_proc)
|
|
29
|
-
apply_multiple_patterns(content, patterns)
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
class << self
|
|
33
|
-
private
|
|
34
|
-
|
|
35
|
-
def callout_attributes(variant)
|
|
36
|
-
case variant
|
|
37
|
-
when 'info'
|
|
38
|
-
{
|
|
39
|
-
additional_params: ' variant="brand"',
|
|
40
|
-
inner_prepend: '<wa-icon slot="icon" name="circle-info" variant="solid"></wa-icon>'
|
|
41
|
-
}
|
|
42
|
-
when 'success'
|
|
43
|
-
{
|
|
44
|
-
additional_params: ' variant="success"',
|
|
45
|
-
inner_prepend: '<wa-icon slot="icon" name="circle-check" variant="solid"></wa-icon>'
|
|
46
|
-
}
|
|
47
|
-
when 'neutral'
|
|
48
|
-
{
|
|
49
|
-
additional_params: ' variant="neutral"',
|
|
50
|
-
inner_prepend: '<wa-icon slot="icon" name="gear" variant="solid"></wa-icon>'
|
|
51
|
-
}
|
|
52
|
-
when 'warning'
|
|
53
|
-
{
|
|
54
|
-
additional_params: ' variant="warning"',
|
|
55
|
-
inner_prepend: '<wa-icon slot="icon" name="triangle-exclamation" variant="solid"></wa-icon>'
|
|
56
|
-
}
|
|
57
|
-
when 'danger'
|
|
58
|
-
{
|
|
59
|
-
additional_params: ' variant="danger"',
|
|
60
|
-
inner_prepend: '<wa-icon slot="icon" name="circle-exclamation" variant="solid"></wa-icon>'
|
|
61
|
-
}
|
|
62
|
-
else
|
|
63
|
-
{
|
|
64
|
-
additional_params: '',
|
|
65
|
-
inner_prepend: ''
|
|
66
|
-
}
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
end
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
end
|